home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / a_utils / perl / prlbkxmp.lha / ch6 / dotime < prev    next >
Text File  |  1991-01-08  |  2KB  |  85 lines

  1. #!/usr/bin/perl
  2.  
  3. # Usage: dotime repeat command
  4.  
  5. die "Usage: $0 <repeat> <command>\n" if @ARGV < 2;
  6.  
  7. $repeat = shift(@ARGV);
  8. die "invalid repeat: $repeat, stopped" 
  9.   unless (($repeat > 0) && ($repeat < 999));
  10.  
  11. # Init our accumulators.
  12.  
  13. $tt_real = $tt_user = $tt_sys = 0;
  14. @t_real  = @t_user  = @t_sys  = ();
  15.  
  16. # Now do the timing runs.
  17.  
  18. print qq/Running "@ARGV" /;
  19. $| = 1;
  20.  
  21. for $pass (1 .. $repeat) {
  22.  
  23.     print "$pass ";
  24.  
  25.     open (TIMES, "/bin/time @ARGV 2>&1 |")
  26.     || die ("Can't run /bin/time @ARGV: $!\n");
  27.  
  28.     while (<TIMES>) {
  29.     if (/^real\s+(\d+\.\d+)\n/) {
  30.         push (@t_real, $1);         # AT&T style
  31.         $tt_real += $1;
  32.     }
  33.     elsif (/^user\s+(\d+\.\d+)/) {
  34.         push (@t_user, $1);
  35.         $tt_user += $1;
  36.     }
  37.     elsif (/^sys\s+(\d+\.\d+)/) {
  38.         push (@t_sys , $1);
  39.         $tt_sys += $1;
  40.     }
  41.     elsif (/^\s*(\S+) real\s*(\S+) user\s*(\S+) sys/) {
  42.         push (@t_real , $1);        # BSD style
  43.         $tt_real += $1;
  44.         push (@t_user , $2);
  45.         $tt_user += $2;
  46.         push (@t_sys , $3);
  47.         $tt_sys += $3;
  48.     }
  49.     }
  50.     close (TIMES);
  51. }
  52.  
  53. print " done\n\n";
  54.  
  55. # Build a dynamic format.
  56.  
  57. $fields = '@>>>>>' x $repeat;
  58. $values = ',shift @_' x $repeat;
  59.  
  60. $form = <<EOFORM;
  61. format STDOUT =
  62. \@<<<\@>>>>>$fields
  63. \$arg,\$avg $values
  64. .
  65. EOFORM
  66.  
  67. print $form if $debugging;
  68. eval $form;
  69.  
  70. sub write {
  71.     $avg = shift;
  72.     write;
  73. }
  74.  
  75. # So write the report already.
  76.  
  77. &write('Avg', 1 .. $repeat);
  78.  
  79. &write(split(' ', ' -----' x ($repeat+1)));
  80.  
  81. for $arg ("real","user","sys ") {
  82.     &write(sprintf("%6.1f", eval "\$tt_$arg/$repeat"),
  83.       eval "\@t_$arg");
  84. }
  85.